package com.ciwong.epaper.util;

import android.graphics.drawable.ColorDrawable;
import android.support.annotation.NonNull;
import android.support.v4.widget.PopupWindowCompat;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.PopupWindow;

import com.ciwong.epaper.R;

/**
 * Created by keepon on 2017/10/18.
 */

public class PopWindowUtil {
	public static  PopupWindow showTipPopupWindow(final View anchorView, final View.OnClickListener onClickListener) {
		try {
			final PopupWindow popupWindow = getPopupWindow(anchorView, onClickListener,0.75,0.75);
			return popupWindow;
		}catch (Exception e){
			return null;
		}

	}
	public static  PopupWindow showTipPopupWindow2(final View anchorView, final View.OnClickListener onClickListener) {
		try {
			final PopupWindow popupWindow = getPopupWindow(anchorView, onClickListener,0.6,0.5);
			return popupWindow;
		}catch (Exception e){
			return null;
		}
	}

	@NonNull
	private static PopupWindow getPopupWindow(View anchorView, final View.OnClickListener onClickListener,double x,double y) {
		final View contentView = LayoutInflater.from(anchorView.getContext()).inflate(R.layout.popuw_content_top_arrow_layout, null);
		contentView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
		// 创建PopupWindow时候指定高宽时showAsDropDown能够自适应
		// 如果设置为wrap_content,showAsDropDown会认为下面空间一直很充足（我以认为这个Google的bug）
		// 备注如果PopupWindow里面有ListView,ScrollView时，一定要动态设置PopupWindow的大小
		final PopupWindow popupWindow = new PopupWindow(contentView,
				contentView.getMeasuredWidth(), contentView.getMeasuredHeight(), false);

		contentView.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				popupWindow.dismiss();
				onClickListener.onClick(v);
			}
		});

		contentView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
			@Override
			public void onGlobalLayout() {
				// 自动调整箭头的位置
				contentView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
			}
		});
		// 如果不设置PopupWindow的背景，有些版本就会出现一个问题：无论是点击外部区域还是Back键都无法dismiss弹框
		popupWindow.setBackgroundDrawable(new ColorDrawable());

		// setOutsideTouchable设置生效的前提是setTouchable(true)和setFocusable(false)
		popupWindow.setOutsideTouchable(true);

		// 设置为true之后，PopupWindow内容区域 才可以响应点击事件
		popupWindow.setTouchable(true);

		// true时，点击返回键先消失 PopupWindow
		// 但是设置为true时setOutsideTouchable，setTouchable方法就失效了（点击外部不消失，内容区域也不响应事件）
		// false时PopupWindow不处理返回键
		popupWindow.setFocusable(false);
		popupWindow.setTouchInterceptor(new View.OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				return false;   // 这里面拦截不到返回键
			}
		});
		// 如果希望showAsDropDown方法能够在下面空间不足时自动在anchorView的上面弹出
		// 必须在创建PopupWindow的时候指定高度，不能用wrap_content
		PopupWindowCompat.showAsDropDown(popupWindow, anchorView, (int) (-contentView.getMeasuredWidth()*x), (int) (-(contentView.getMeasuredHeight()*y)-anchorView.getMeasuredHeight()), Gravity.NO_GRAVITY);
		return popupWindow;
	}
}
